home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / aztecnos.arc / ECVECAT.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-10-23  |  2.6 KB  |  160 lines

  1. ; alternative to ecvec.asm -- WORKS ON PC/ATs (80826) only!
  2.  
  3.     mod186
  4.     include lmacros.h
  5.  
  6. ; Conditional ES save/restore macros not in lmacros.h
  7. pushes    macro
  8.     ifdef LONGPTR
  9.     push    es
  10.     endif
  11.     endm
  12.  
  13. popes    macro
  14.     ifdef LONGPTR
  15.     pop    es
  16.     endif
  17.     endm
  18.  
  19.     assume    ds:dataseg
  20.     assume    cs:codeseg
  21.     extrn    _Dorg_:byte
  22.     extrn    Sssave:word,Spsave:word,Intstk_:byte
  23.  
  24.     ifdef    FARPROC
  25.     extrn    doret:far,ecint_:far,
  26.     else
  27.     extrn    doret:near,ecint_:near,
  28.     endif
  29.  
  30. dbase    dw    _Dorg_
  31. ; ec0vec - Ethernet interrupt handler
  32.     public    ec0vec_
  33.  
  34. ec0vec_ proc    far
  35.     push    ds        ; save on user stack
  36.     mov    ds,cs:dbase    ; establish interrupt data segment
  37.  
  38.     mov    Sssave,ss    ; stash user stack context
  39.     mov    Spsave,sp
  40.  
  41.     mov    ss,cs:dbase
  42.     lea    sp,Intstk_+512
  43.  
  44.     push    ax        ; save user regs on interrupt stack
  45.     push    bx
  46.     push    cx
  47.     push    dx
  48.     push    bp
  49.     push    si
  50.     push    di
  51.     push    es
  52.     push    ds
  53.     pop    es
  54.  
  55.     mov    ax,0        ; arg for service routine
  56.     push    ax
  57.     call    ecint_
  58.     pop    ax
  59.     jmp    doret
  60. ec0vec_    endp
  61.  
  62. ; ec1vec - Ethernet interrupt handler
  63.     public    ec1vec_
  64.  
  65. ec1vec_ proc    far
  66.     push    ds        ; save on user stack
  67.     mov    ds,cs:dbase    ; establish interrupt data segment
  68.  
  69.     mov    Sssave,ss    ; stash user stack context
  70.     mov    Spsave,sp
  71.  
  72.     mov    ss,cs:dbase
  73.     lea    sp,Intstk_+512
  74.  
  75.     push    ax        ; save user regs on interrupt stack
  76.     push    bx
  77.     push    cx
  78.     push    dx
  79.     push    bp
  80.     push    si
  81.     push    di
  82.     push    es
  83.     push    ds
  84.     pop    es
  85.  
  86.     mov    ax,1        ; arg for service routine
  87.     push    ax
  88.     call    ecint_
  89.     pop    ax
  90.     jmp    doret
  91. ec1vec_    endp
  92.  
  93. ; ec2vec - Ethernet interrupt handler
  94.     public    ec2vec_
  95.  
  96. ec2vec_ proc    far
  97.     push    ds        ; save on user stack
  98.     mov    ds,cs:dbase    ; establish interrupt data segment
  99.  
  100.     mov    Sssave,ss    ; stash user stack context
  101.     mov    Spsave,sp
  102.  
  103.     mov    ss,cs:dbase
  104.     lea    sp,Intstk_+512
  105.  
  106.     push    ax        ; save user regs on interrupt stack
  107.     push    bx
  108.     push    cx
  109.     push    dx
  110.     push    bp
  111.     push    si
  112.     push    di
  113.     push    es
  114.     push    ds
  115.     pop    es
  116.  
  117.     mov    ax,2        ; arg for service routine
  118.     push    ax
  119.     call    ecint_
  120.     pop    ax
  121.     jmp    doret
  122. ec2vec_    endp
  123.  
  124. ; fast buffer I/O routines -- used by 3-COM Ethernet controller
  125.  
  126. ; outbuf - put a buffer to an output port
  127.     procdef outbuf,<<oport,word>,<obuf,ptr>,<ocnt,word>>
  128.     pushf
  129.     push    si
  130.     pushds
  131.     mov    dx,oport
  132.     mov    cx,ocnt
  133.     ldptr    si,obuf,ds    ; ds:si = obuf
  134.     cld
  135.     rep outsb        ; works only on PC/AT (80286)
  136.     popds
  137.     pop    si
  138.     popf
  139.     pret
  140.     pend    outbuf
  141.  
  142. ; inbuf - get a buffer from an input port
  143.     procdef inbuf,<<iport,word>,<ibuf,ptr>,<icnt,word>>
  144.     pushf
  145.     push    di
  146.     pushes
  147.     mov    dx,iport
  148.     mov    cx,icnt
  149.     ldptr    di,ibuf,es    ; es:di = ibuf (es already set in small model)
  150.     cld
  151.     rep insb        ; works only on PC/AT (80286)
  152.     popes
  153.     pop    di
  154.     popf
  155.     pret
  156.     pend    inbuf
  157.  
  158.     end
  159.  
  160.